
package com.util;

/**
 * У����
 * @author xied
 * @version 1.0 2007-11-13
 * @since 1.0
 */
public class Validation {
	/** �����ʼ�У����� */
	private static final String EMAL_PATTERN = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
	/** url��ַ���� */
	private static final String URL_PATTERN = "^http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$";
	/** �л����񹲺͹����֤������� */
	private static final String CHINESE_ID_PATTERN = "^\\d{15}(\\d{2}[Xx0-9])?$";
	/** �л����񹲺͹����ۡ��ġ�̨�����ʱ���� */
	private static final String CHINESE_POSTCODE_PATTERN = "^[1-9]\\d{5}$";
	/** ����У����� */
	private static final String DATE_PATTERN = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$";
	/** ����У����� */
	private static final String PASSWORD_PATTERN = "^[A-Za-z0-9]+$";

	/**
	 * ���캯��(��)
	 */
	private Validation() {}
	
	/**
	 * ��⴫���ַ��Ƿ���У�����ƥ��
	 * @param input �����ַ�
	 * @param pattern У�����
	 * @return
	 * <li>true���ַ���У�����ƥ��</li>
	 * <li>false���ַ�Ϊnull��У�����Ƿ����ַ���У�����ƥ��</li>
	 */
	public static boolean validate(String input, String pattern) {
		if (input == null || pattern == null) return false;
		boolean result;
		try {
			result = input.matches(pattern);
		} catch (RuntimeException e) {
			result = false;
		}
		return result;
	}

	/**
	 * ��⴫���ַ��Ƿ���У�����ƥ��
	 * @param input �����ַ�
	 * @param pattern У�����
	 * @return
	 * <li>true���ַ���У�����ƥ��</li>
	 * <li>false���ַ�Ϊnull����У�����ƥ��</li>
	 */
	private static boolean validateString(String input, String pattern) {
		return (input == null) ? false : input.matches(pattern);
	}
	
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ��ĵ����ʼ���ַ��ʽ
	 * @param email �����ʼ���ַ
	 * @return
	 * <li>true���ǵ����ʼ���ַ</li>
	 * <li>false�����ǵ����ʼ���ַ</li>
	 */
    public static boolean isEmail(String email) {
        return validateString(email, EMAL_PATTERN);
    }
    
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ���URL��ַ��ʽ
	 * @param url ����URL��ַ
	 * @return
	 * <li>true����URL��ַ</li>
	 * <li>false������URL��ַ</li>
	 */
    public static boolean isUrl(String url) {
    	return validateString(url, URL_PATTERN);
    }
    
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ����л����񹲺͹����֤��ʽ
	 * @param idNum �������֤����
	 * @return
	 * <li>true�����л����񹲺͹����֤����</li>
	 * <li>false�������л����񹲺͹����֤����</li>
	 */
    public static boolean isChineseIdCard(String idNum) {
    	return validateString(idNum, CHINESE_ID_PATTERN);
    }
    
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ����л����񹲺͹����ۡ��ġ�̨�����ʱ��ʽ
	 * @param postcode �����ʱ�
	 * @return
	 * <li>true�����л����񹲺͹����ۡ��ġ�̨�����ʱ�</li>
	 * <li>false�������л����񹲺͹����ۡ��ġ�̨�����ʱ�</li>
	 */
    public static boolean isChinesePostcode(String postcode) {
    	return validateString(postcode, CHINESE_POSTCODE_PATTERN);
    }
    
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ������ڸ�ʽ
	 * @param date ��������
	 * @return
	 * <li>true��������</li>
	 * <li>false����������</li>
	 */
    public static boolean isDate(String date) {
    	return validateString(date, DATE_PATTERN);
    }
    
	/**
	 * ��⴫���ַ��Ƿ���һ���Ϸ��������ʽ
	 * @param password ��������
	 * @return
	 * <li>true��������</li>
	 * <li>false����������</li>
	 */
    public static boolean isPassword(String password) {
    	return validateString(password, PASSWORD_PATTERN);
    }
}
